package com.jinyun.controller;

import com.jinyun.pojo.ElectronicFence;
import com.jinyun.pojo.User;
import com.jinyun.pojo.Vehicle;
import com.jinyun.service.UserService;
import com.jinyun.service.VehicleService;
import com.jinyun.utils.PolygonUtils;
import com.jinyun.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.web.bind.annotation.*;

/**
 * 人员管理相关的业务功能
 */
@RequestMapping("user")
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 查询人员列表
     *
     * @param userQueryVo
     * @return
     */
    @GetMapping("list")
    public Object queryUserList(UserQueryVo userQueryVo){
        return this.userService.queryUserList(userQueryVo);
    }


    /**
     * 查询人员列表
     *
     * @param userQueryVo
     * @return
     */
    @GetMapping("list1")
    public Object queryUserList1(UserQueryVo1 userQueryVo){
        return this.userService.queryUserList1(userQueryVo);
    }

    /**
     * 根据id查询人员数据
     *
     * @param id 人员id
     * @return
     */
    @GetMapping("details/{id}")
    public Object queryUserById(@PathVariable("id") String id){
        return this.userService.queryUserById(id);
    }

    /**
     * 根据id删除人员数据
     *
     * @param id 人员id
     * @return
     */
    @DeleteMapping("delete/{id}")
    public Object deleteUserById(@PathVariable("id") String id){
        return this.userService.deleteUserById(id);
    }

    /**
     * 新增人员数据
     *
     * @param user 人员数据
     * @return
     */
    @PostMapping("add")
    public Object createUser(@RequestBody User user){
        return this.userService.createUser(user);
    }


    /**
     * 更新人员位置信息
     * @param currentPosition  当前的位置信息
     * @return
     */
    @PostMapping("updateLocation")
    public Object updateUserLocation(@RequestBody LocationNamePoint1 currentPosition){
        return this.userService.updateUserLocation( currentPosition);
    }

    /**
     * 根据ID查询电子围栏并判断给定的经纬度是否在其范围内
     *
     * @param id   电子围栏的唯一标识符
     * @param lat  经纬度中的纬度
     * @param lng  经纬度中的经度
     * @return 如果点在电子围栏内，则返回true；否则返回false。
     */
    @PostMapping("isInPolygon/{id}")
    public Object isInPolygon(@PathVariable("id") String id, @RequestParam("lat") String lat, @RequestParam("lng") String lng){
        return this.userService.checkPointInFence(id, lat, lng);
    }


    /**
     * 查询人员轨迹
     * @param id               人员id
     * @param   date  日期    yyyy-MM-dd
     * @return
     */
    @PostMapping("queryUserLocus")
    public Object queryUserLocus(@RequestParam(name = "id") String id,@RequestParam(required = false,name = "date")  String date){
        return this.userService.queryUserLocus( id, date);
    }




}
